package cuatroenraya.jugadores;
import cuatroenraya.Jugador;

public class JugadorAlumnoG12 extends Jugador {
	public JugadorAlumnoG12(){}

    @Override
    public int[] jugar(int[][] tablero)
    {
        int[] point = new int[2];

	
        //Analizo la jugada del jugador
        int[][] puntajeJugador = new int[8][8];
        
        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 8; j++)
            {
				
                if (tablero[i][j] == 0)
                {
                    int contador = 0;
                    
					for (int k = 1; k <= 3; k++)
					{
						if ((j + k) < 8 && (j + k) > -1)
						{
							if (tablero[i][j + k] == 1)
								contador++;
							else
								break;
						}
						else
							break;
					}
					
					for (int k = 1; k <= 3; k++)
					{
						if ((j - k) < 8 && (j - k) > -1)
						{
							if (tablero[i][j - k] == 1)
								contador++;
							else
								break;
						}
						else
							break;
					}
					puntajeJugador[i][j] += getPuntos(contador);

					if (puntajeJugador[i][j] >= 100)
                    {
                        point[0] = i;
                        point[1] = j;
                        return point;
                    }
					
                    contador = 0;
					for (int k = 1; k <= 3; k++)
					{
						if ((i + k) < 8 && (i + k) > -1)
						{
							if (tablero[i + k][j] == 1)
								contador++;
							else
								break;
						}
						else
							break;
					}
					for (int k = 1; k <= 3; k++)
					{
						if ((i - k) < 8 && (i - k) > -1)
						{
							if (tablero[i - k][j] == 1)
								contador++;
							else
								break;
						}
						else
							break;
					}
					puntajeJugador[i][j] += getPuntos(contador);

					if (puntajeJugador[i][j] >= 100)
                    {
                        point[0] = i;
                        point[1] = j;
                        return point;
                    }
					
                    contador = 0;
					for (int k = 1; k <= 3; k++)
					{
						if ((j - k) < 8 && (i - k) < 8 && (i - k) > -1 && (j - k) > -1)
						{
							if (tablero[(i - k)][(j - k)] == 1)
								contador++;
							else
								break;
						}
						else
							break;
					}
					
					for (int k = 1; k <= 3; k++)
					{
						if ((j + k) < 8 && (i + k) < 8 && (i + k) > -1 && (j + k) > -1)
						{
							if (tablero[(i + k)][(j + k)] == 1)
								contador++;
							else
								break;
						}
						else
							break;
					}
					puntajeJugador[i][j] += getPuntos(contador);

					if (puntajeJugador[i][j] >= 100)
                    {
                        point[0] = i;
                        point[1] = j;
                        return point;
                    }
                    
                    contador = 0;
					
					for (int k = 1; k <= 3; k++)
					{
						if ((j + k) < 8 && (i - k) < 8 && (i - k) > -1 && (j + k) > -1)
						{
							if (tablero[(i - k)][(j + k)] == 1)
								contador++;
							else
								break;
						}
						else
							break;
					}

					for (int k = 1; k <= 3; k++)
					{
						if ((j - k) < 8 && (i + k) < 8 && (i + k) > -1 && (j - k) > -1)
						{
							if (tablero[(i + k)][(j - k)] == 1)
								contador++;
							else
								break;
						}
						else
							break;
					}
					puntajeJugador[i][j] += getPuntos(contador);


					if (puntajeJugador[i][j]  >= 100)
                    {
                        point[0] = i;
                        point[1] = j;
                        return point;
                    }
                }
            }
        }

        
			//Analizo la jugada del adversario
        int[][] puntajeAdversario = new int[8][8];		
        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 8; j++)
            {
				
                if (tablero[i][j] == 0)
                {
					int contador = 0;

					for (int k = 1; k <= 3; k++)
					{
						if ((j + k) > -1 && (j + k) < 8)
						{
							if (tablero[i][j + k] == 2)
								contador++;
							else
								break;
						}
						else
							break;
					}
					for (int k = 1; k <= 3; k++)
					{
						if ((j - k) > -1 && (j - k) < 8)
						{
							if (tablero[i][j - k] == 2)
								contador++;
							else
								break;
						}
						else
							break;
					}
					puntajeAdversario[i][j] += getPuntos(contador);

					if (puntajeAdversario[i][j] >= 100)
                    {
                        point[0] = i;
                        point[1] = j;
                        return point;
                    }

                    
                    contador = 0;
					
					for (int k = 1; k <= 3; k++)
					{
						if ((i + k) > -1 && (i + k) < 8)
						{
							if (tablero[i + k][j] == 2)
								contador++;
							else
								break;
						}
						else
							break;
					}
					
					for (int k = 1; k <= 3; k++)
					{
						if ((i - k) > -1 && (i - k) < 8)
						{
							if (tablero[i - k][j] == 2)
								contador++;
							else
								break;
						}
						else
							break;
					}
					puntajeAdversario[i][j] += getPuntos(contador);

					if (puntajeAdversario[i][j] >= 100)
                    {
                        point[0] = i;
                        point[1] = j;
                        return point;
                    }

                    
                    contador = 0;
					
					for (int k = 1; k <= 3; k++)
					{
						if ((j - k) < 8 && (i - k) < 8 && (i - k) > -1 && (j - k) > -1)
						{
							if (tablero[(i - k)][(j - k)] == 2)
								contador++;
							else
								break;
						}
						else
							break;
					}
					
					for (int k = 1; k <= 3; k++)
					{
						if ((j + k) < 8 && (i + k) < 8 && (i + k) > -1 && (j + k) > -1)
						{
							if (tablero[(i + k)][(j + k)] == 2)
								contador++;
							else
								break;
						}
						else
							break;
					}
					puntajeAdversario[i][j] += getPuntos(contador);

					if (puntajeAdversario[i][j] >= 100)
                    {
                        point[0] = i;
                        point[1] = j;
                        return point;
                    }

										
					for (int k = 1; k <= 3; k++)
					{
						if ((j + k) < 8 && (i - k) < 8 && (i - k) > -1 && (j + k) > -1)
						{
							if (tablero[(i - k)][(j + k)] == 2)
								contador++;
							else
								break;
						}
						else
							break;
					}
					
					for (int k = 1; k <= 3; k++)
					{
						if ((j - k) < 8 && (i + k) < 8 && (i + k) > -1 && (j - k) > -1)
						{
							if (tablero[(i + k)][(j - k)] == 2)
								contador++;
							else
								break;
						}
						else
							break;
					}
					puntajeAdversario[i][j] += getPuntos(contador);


					if (puntajeAdversario[i][j]  >= 100)
                    {
                        point[0] = i;
                        point[1] = j;
                        return point;
                    }
                }
            }
        }

		   //Busco el mayor puntaje del jugador y del adversario
        int[] maxJugador = new int[3];

        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                if (puntajeJugador[i][j] > maxJugador[2])
                {
                    maxJugador[0]=i;
                    maxJugador[1]=j;
                    maxJugador[2] = puntajeJugador[i][j];
                }
            }
        }

		
        int[] maxAdversario = new int[3];

        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < 8; j++)
            {
                if (puntajeAdversario[i][j] > maxAdversario[2])
                {
                    maxAdversario[0] = i;
                    maxAdversario[1] = j;
                    maxAdversario[2] = puntajeAdversario[i][j];
                }
            }
        }


        //Analizo cual es la jugada que mas me conviene
        if (maxJugador[2] >= maxAdversario[2])
        {
            point[0] = maxJugador[0];
            point[1] = maxJugador[1];
        }
        else
        {
            point[0] = maxAdversario[0];
            point[1] = maxAdversario[1];
        }
        return point;
    }

     private int getPuntos(int nro)
    {
        if (nro == 0)
            return 0;
        else if (nro == 1)
            return 3;
        else if (nro == 2)
            return 7;
        else
            return 100;
    }

    public String devolverIntegrantes()
    {
    	String str = "D'Agostino, Maria Eugenia (47603) / Galiano, Enrique Daniel (47620)";
        return str;
    }

    public String devolverNombre()
    {
    	String str = "-INTELIGENCIA ARTIFICIAL 2009- Trabaja Practico Integrador: 4 en linea";
        return str;
    }

    public String devolverGrupo()
    {
    	String str = "Grupo Nro";
        return str;
    }

    public String devolverCurso()
    {
    	String str = "5K4";
        return str;
    }
}
